const express = require('express')
const app = express()
const port = 3000
const BASE = "http://localhost:3000/";
const jwt = require('jsonwebtoken')
const JWT_SECRET_KEY = "JWT_SECRET_KEY";
const Response = require("./utils/Response.js");


//配置跨域
const cors = require('cors')
app.use(
    cors({
        origin:'*'
    })
)

// 解析post请求参数
app.use(express.urlencoded())

// 配置multer中间件，处理文件上传
const multer = require("multer");
const uuid = require("uuid");
const uploadTools = multer({
  storage: multer.diskStorage({
    // 该存储方案将会把文件直接存入磁盘
    destination: (req, file, callback) => {
      callback(null, "static");
    },
    filename: (req, file, callback) => {
      // 通过file，获取原始文件名     huangbo.jpg
      let name = file.originalname;
      // 截取源文件的后缀 .jpg  .png  ....
      let ext = name.substr(name.lastIndexOf("."));
      // 生成一个随机文件名，调用callback返回即可
      let newName = uuid.v4() + ext;
      callback(null, newName);
    },
  }),
});
// 配置static目录为静态资源托管文件夹 ， 这样就可以直接通过http://ip:port/文件名  访问static目录下的资源
app.use(express.static("static"));

// 自定义token全局验证中间件
const tokenTools = function (req,res,next){
    // 若请求路径是 /user/login 则不拦截，直接向后执行即可
  if (req.path == "/user/login") {
    next();
    return;
  }

  //测试环境中，不做token拦截，直接执行后续业务
  if (1 == 1) {
    next();
    return;
  }

  // 执行token验证
  let token = req.headers["authorization"];
  try {
    let payload = jwt.verify(token, JWT_SECRET_KEY);
    req.tokenPayload = payload; // 将token中存储的数据，直接复制给req，这样在后续业务中就可以使用req.tokenPayload获取这些信息
  } catch (error) {
    resp.send(Response.error(401, "用户验证失败，请重新登录"));
    return;
  }
  next(); // 继续后续业务的执行
}
app.use(tokenTools)



// 引入外部路由
app.use(require('./router/news'))
app.use(require('./router/scenic'))
app.use(require('./router/scenicClass'))
app.use(require('./router/blogger'))
app.use(require('./router/user'))
app.use(require("./router/HotEvent.js"));
app.use(require("./router/Company.js"));
app.use(require("./router/Goods.js"));
app.use(require("./router/Contact.js"));
app.use(require("./router/Message.js"));
app.use(require("./router/Banner.js"));
app.use(require("./router/Category.js"));
app.use(require("./router/Timer.js"));
app.use(require("./router/Cart.js"));





app.post("/upload", uploadTools.single("file"), (req, resp) => {
  // multer中间件将会把文件信息存入：req.files
  let url = BASE + req.file.filename;
  console.log(req.file);
  resp.send(Response.ok(url));
});


  app.listen(port, () => {
    console.log("新农村后端服务已启动...");
  });
  